package br.com.tcc.dao;

import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;

import br.com.tcc.model.Anunciante;
import br.com.tcc.model.Categoria;

public class CategoriaDAO {
	private EntityManagerFactory emf;
	
	public CategoriaDAO() {
		emf = Persistence.createEntityManagerFactory("persistencia");
	}
	
	public boolean adicionar(Categoria categoria) {
		EntityManager em = emf.createEntityManager();
		boolean retorno = true;
		try{
			em.getTransaction().begin();
			em.persist(categoria);
			em.getTransaction().commit();
		}catch(Exception e){
			em.getTransaction().rollback();
			e.printStackTrace();
			retorno = false;
		}finally{
			em.close();
		}
	   	return retorno;
	}
	/**
	 * Buscar uma categoria pelo nome
	 * @return
	 */
	public Categoria buscar(String nome) {
		Categoria retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("select c from Categoria c where c.nome=:nome");
		   	q.setParameter("nome", nome);
		   	retorno = (Categoria) q.getSingleResult();
	   	
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		
		return retorno;
	}
	/**
	 * obter a lista de produtos na base
	 * @return
	 */

	public void remover(Categoria c) {
		EntityManager em = emf.createEntityManager();
		
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("delete from Categoria c where c.idCategoria = :idCategoria");
		 	q.setParameter("idCategoria", c.getIdCategoria());
		   	q.executeUpdate();
		 	em.getTransaction().commit();
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		
	}

	public Categoria buscarId(int id){
		Categoria retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	retorno = em.find(Categoria.class, id);
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		return retorno;
	}

	public void atualizar(Categoria c){
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	em.merge(c);
		   	em.getTransaction().commit();
		}catch(Exception e){
			em.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			em.close();
		}
	}

	public Categoria buscarNomeCategoriaPai(String nome, int categoriaPai) {
		Categoria retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("select c from Categoria c where c.nome=:nome and c.categoriaPai = :categoriaPai");
		   	q.setParameter("nome", nome);
		   	q.setParameter("categoriaPai", categoriaPai);
		   	retorno = (Categoria) q.getSingleResult();
	   	
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		
		return retorno;
	}


}
